const express = require('express')
const path = require('path')
const bodyParser = require('body-parser')
const session = require('express-session')

const router = require('./router')
var app = express()

// 配置静态资源
// app.use('/public', express.static(path.join(__dirname, 'public')))
// app.use('/node_modules', express.static(path.join(__dirname, 'node_modules')))


app.use('/public/', express.static(path.join(__dirname, './public/')))
app.use('/node_modules/', express.static(path.join(__dirname, './node_modules/')))

// 配置模板
app.engine('html', require('express-art-template'));
app.set('views', path.join(__dirname, 'views'));

// 配置session
app.use(session({
    // 配置加密字符串 自定义的 类似  md5(md5(body.passwor) + mayufo) 这个mayufo就是加密字符串
    // 增加安全性，防止客户端恶意伪造
    secret: 'mayufo', 
    resave: false,
    // 无论是否使用session, 默认分配一把钥匙
    saveUninitialized: true
  }))

// 配置body-parser
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())


// 在express中，默认不支持session 和 cookie
//  但是我们可以使用第三方中间件 express-session 来解决
// npm i express-session
// 配置 (要在路由之前)
// 使用 通过req.session来访问和设置成员
// 添加Session 数据： req.session.foo = 'bar'
// 访问Session 数据： req.session.foo 

// 验证登录
app.use((req, res, next) => {
    if (req.url === '/login' || req.url === '/register') {
        next()
    } else {
        if (req.session.user) {
            next()
        } else {
            res.render('login.html', {
                info: '验证失败，请重新登录'
            })
        }
    }
    
})

// 路由配置
app.use(router)

// 处理404  注意顺序
app.use((req, res) => {
    res.render('404.html')
})

// // 当有个路由是
// app.get('/', (req, res, next) => {
//     // 路径错误 使用next, 会直接跳转到全局错误处理中
//     false.readFile('./a/n', () => {
//         if (err) {
//             // return res.status(500).send('Server Error')
//             // 直接进入 带有四个参数，能进行错误的处理的中间件
//             next(err)
//         }
//     })
// })

// 处理全局错误处理
app.use((err, req, res, next) => {
    res.status(500).json({
        err_code: 500,
        message: err.message
    })
})

app.listen(5000, () => {
    console.log('listening on port 5000')
})

module.exports = app